#ifndef __LYNX_SOUND_HPP_INCLUDED__
#define __LYNX_SOUND_HPP_INCLUDED__

#include "LynxConfig.hpp"
#include "LynxSoundSource.hpp"

namespace Lynx
{
namespace Audio
{

class Sound : public virtual Myth::ReferenceCounter
{
public:
    virtual SoundSource *get_source(void) const = 0;

    virtual void play(void) = 0;

    virtual void pause(void) = 0;

    virtual void stop(void) = 0;

    virtual bool is_finished(void) const = 0;

    virtual float get_volume(void) const = 0;

    virtual void set_volume(float volume) = 0;

    virtual bool is_looping(void) const = 0;

    virtual void set_looping(bool looping = true) = 0;

    virtual void set_pitch(float pitch = 1.0f) = 0;

    virtual float get_pitch(void) const = 0;

    virtual void set_maximum_falloff_distance(float max) = 0;

    virtual float get_maximum_falloff_distance(void) const = 0;

    virtual void set_rolloff_factor(float factor) = 0;

    virtual float get_rolloff_factor(void) const = 0;

    virtual void set_reference_distance(float distance) = 0;

    virtual float get_reference_distance(void) const = 0;

    virtual void set_position(const Myth::Math::Vector3f &position) = 0;

    virtual Myth::Math::Vector3f get_position(void) const = 0;

    virtual void set_velocity(const Myth::Math::Vector3f &velocity) = 0;

    virtual Myth::Math::Vector3f get_velocity(void) const = 0;
};

} // namespace Audio
} // namespace Lynx

#endif // __LYNX_SOUND_HPP_INCLUDED__

